#ifndef MOTOR_MG513_H
#define MOTOR_MG513_H
#include "main.h"
#include "oled.h"
#include "stm32f4xx_hal.h"
#include <stdint.h>
#include <stdbool.h>
#include	"tim.h"
#include "cmsis_os2.h"

typedef struct {
    float kp;
    float ki;
    float kd;
    float ref;       // 目标值（单位：圈）
    float fdb;       // 反馈值
    float output;    // 输出值
	  float integral;  // 积分项
    float error[3]; // 上次误差
		float outputmin;
		float outputmax;
} Mg513_Pid;
void SetMg513Pid(Mg513_Pid *mg513pid,float kp,float ki,float kd,float outputmin,float outputmax);
void Mg513Run(Mg513_Pid *mg513pid,float target);
void Mg513Run_up(Mg513_Pid *mg513pid,float target);
int16_t Mg513_Output_Calculate(Mg513_Pid *mg513pid,float target);
int32_t uint32_to_int32(uint32_t value);
void zhuanzi1heshang(float Z_position,Mg513_Pid *mg513pid);
void zhuanzi1songkai(float Z_position,Mg513_Pid *mg513pid);
void zhuanzi2heshang(float Z_position,Mg513_Pid *mg513pid);
void zhuanzi2songkai(float Z_position,Mg513_Pid *mg513pid);
#endif // MOTOR_MG513_H